#ifndef _SHARED_EVENT_HANDLER_H_
#define _SHARED_EVENT_HANDLER_H_

#define HANDLES( eventType ) public EventHandler<eventType>
#define DECLARE_HANDLER( eventType ) virtual void HandleEvent( const eventType& ev )
#define DEFINE_HANDLER( ownerType, eventType ) void ownerType::HandleEvent( const eventType& ev )

namespace Hiranipra {

	template<class E>
	class EventHandler : public RefInstance
	{
	public:
		virtual ~EventHandler(){}

		virtual void HandleEvent( const E& ev ) = 0;

	};

}

#endif // _SHARED_EVENT_HANDLER_H_
